package cn.tedu.csmall.stock.webapi.quartz;

import cn.tedu.csmall.stock.webapi.quartz.rabbit.RabbitMQJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// QuartzConfig类来绑定Job和Trigger触发关系的
// 这个触发关系实际上会由Spring容器中Scheduler对象调度
// 要写进行正确配置首先要添加@Configuration注解
@Configuration
public class QuartzConfig {

    // 利用@Bean注解,将JobDetail对象保存到Spring容器中
    @Bean
    public JobDetail showTime(){
        // JobDetail对象中配置要运行的Job类的信息
        // JobBuilder.newJob这个方法就是创建JobDetail对象的方法,参数关联要运行的Job实现类
        return JobBuilder.newJob(RabbitMQJob.class)
                // 需要给当前任务起名,不要和其他任务名称重复
                .withIdentity("showTime")
                // 默认情况下,JobDetail对象生成后,如果没有触发器绑定,就会自动删除
                // 设置storeDurably()方法后,JobDetail生成后即使没有被绑定,也不会删除
                .storeDurably()
                .build();
    }

    // 利用@Bean注解,将Trigger对象保存再Spring容器,用于设置Job的触发时间
    @Bean
    public Trigger showTimeTrigger(){
        // 声明cron表达式,定义job运行触发的时间
        CronScheduleBuilder cron=
                CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                // 设置要触发的JobDetail对象
                .forJob(showTime())
                // 当前触发器也要起名字,不要和别的触发器重复
                .withIdentity("showTimeTrigger")
                // 绑定cron表达式
                .withSchedule(cron)
                .build();
    }





}
